package com.itheima.interface2; // 包声明，指定当前类所在的位置，com.itheima.interface2是包路径

public class Test { // 定义一个公开的测试类Test，用于演示接口的好处
    public static void main(String[] args) { // 程序的入口方法，所有Java程序都从这里开始执行
        // 目标：去理解Java设计接口的好处、用处。 // 注释说明本示例的学习目标
        // 接口弥补了类单继承的不足，可以让类拥有更多角色，类的功能更强大。 // 注释说明接口的第一个好处
        People p = new Student(); // 创建Student对象，并赋值给People类型的变量，这是向上转型（多态）
        Driver d = new Student(); // 多态 // 创建Student对象，并赋值给Driver接口类型的变量，这也是多态
        BoyFriend bf = new Student(); // 创建Student对象，并赋值给BoyFriend接口类型的变量，展示了一个对象可以有多个身份

        // 接口可以实现面向接口编程，更利于解耦合。 // 注释说明接口的第二个好处：面向接口编程
        Driver a = new Student(); // 声明Driver类型的变量，但赋值Student对象，体现面向接口而非面向实现
        Driver a2 = new Teacher(); // 同样声明Driver类型变量，但赋值Teacher对象，可以轻松切换不同实现

        BoyFriend b1 = new Student(); // 声明BoyFriend类型变量，赋值Student对象
        BoyFriend b2 = new Teacher(); // 同样声明BoyFriend类型变量，赋值Teacher对象，展示接口带来的灵活性
    } // main方法结束
} // Test类结束

interface Driver{} // 定义一个空接口Driver，表示司机角色
interface BoyFriend{} // 定义一个空接口BoyFriend，表示男朋友角色
class People{} // 定义一个普通类People，作为基类
class Student extends People implements Driver, BoyFriend{} // 定义Student类，继承People类同时实现Driver和BoyFriend两个接口，展示类可以多实现

class Teacher implements Driver, BoyFriend{} // 定义Teacher类，直接实现Driver和BoyFriend两个接口